ãã¶ã€ã³ãã¿ãŒã³ã®äžçãæ¢æ±ããŸããããã¯ãäžè¬çãªãœãããŠã§ã¢èšèšåé¡ã«å¯Ÿããåå©çšå¯èœãªè§£æ±ºçã§ããã³ãŒãã®å質ãä¿å®æ§ãæ¡åŒµæ§ãåäžãããæ¹æ³ãåŠã³ãŸãããã
ãã¶ã€ã³ãã¿ãŒã³ïŒãšã¬ã¬ã³ããªãœãããŠã§ã¢ã¢ãŒããã¯ãã£ã®ããã®åå©çšå¯èœãªãœãªã¥ãŒã·ã§ã³
ãœãããŠã§ã¢éçºã®é åã«ãããŠããã¶ã€ã³ãã¿ãŒã³ã¯ãé »ç¹ã«çºçããåé¡ã«å¯ŸããŠåå©çšå¯èœãªè§£æ±ºçãæäŸãããå®èšŒæžã¿ã®èšèšå³ãšããŠæ©èœããŸãããããã¯ãæ°å幎ã«ãããå®è·µçãªå¿çšãéããŠç£šããããã¹ããã©ã¯ãã£ã¹ã®éåäœã§ãããã¹ã±ãŒã©ãã«ã§ä¿å®æ§ãé«ããå¹ççãªãœãããŠã§ã¢ã·ã¹ãã ãæ§ç¯ããããã®å ç¢ãªãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãããã®èšäºã§ã¯ããã¶ã€ã³ãã¿ãŒã³ã®äžçãæ·±ãæãäžãããã®å©ç¹ãåé¡ããããŠå€æ§ãªããã°ã©ãã³ã°ã³ã³ããã¹ãã«ãããå®è·µçãªå¿çšãæ¢ããŸãã
ãã¶ã€ã³ãã¿ãŒã³ãšã¯äœãïŒ
ãã¶ã€ã³ãã¿ãŒã³ã¯ãã³ããŒïŒããŒã¹ãããŠããã«äœ¿ããã³ãŒãã®æçã§ã¯ãããŸãããããããããã¯ç¹°ãè¿ãçºçããèšèšåé¡ã«å¯Ÿãã解決çã®äžè¬åãããèšè¿°ã§ããéçºè éã§å ±éã®èªåœãšå ±æãããçè§£ãæäŸãããã广çãªã³ãã¥ãã±ãŒã·ã§ã³ãšååãå¯èœã«ããŸãããããããœãããŠã§ã¢ã®å»ºç¯ãã³ãã¬ãŒãã®ãããªãã®ã ãšèããŠãã ããã
æ¬è³ªçã«ããã¶ã€ã³ãã¿ãŒã³ã¯ç¹å®ã®ã³ã³ããã¹ãå ã§ã®èšèšåé¡ã«å¯Ÿãã解決çãå ·äœåãããã®ã§ããããã¯ä»¥äžã®ããšãèšè¿°ããŸãïŒ
- ããã察åŠããåé¡ã
- ãã®åé¡ãçºçããã³ã³ããã¹ãã
- åå ãããªããžã§ã¯ããšãã®é¢ä¿ãå«ã解決çã
- ãã¬ãŒããªããæœåšçãªå©ç¹ãå«ãããã®è§£æ±ºçãé©çšããçµæã
ãã®æŠå¿µã¯ããGoF (å人çµ)ããšããŠç¥ããããšãŒãªãã»ã¬ã³ãããªãã£ãŒãã»ãã«ã ãã©ã«ãã»ãžã§ã³ãœã³ããžã§ã³ã»ãŽãªã·ãã£ãŒã¹ã«ãã£ãŠã圌ãã®ç¬åµçãªæžç±ããªããžã§ã¯ãæåã«ãããåå©çšã®ããã®ãã¶ã€ã³ãã¿ãŒã³ãã§åºããããŸããã圌ãã¯ãã®ã¢ã€ãã¢ã®çºæ¡è ã§ã¯ãããŸããããå€ãã®åºæ¬çãªãã¿ãŒã³ãäœç³»åã»ã«ã¿ãã°åãããœãããŠã§ã¢èšèšè ã®ããã®æšæºçãªèªåœã確ç«ããŸããã
ãªããã¶ã€ã³ãã¿ãŒã³ã䜿çšããã®ãïŒ
ãã¶ã€ã³ãã¿ãŒã³ãæ¡çšããããšã«ã¯ãããã€ãã®äž»èŠãªå©ç¹ããããŸãïŒ
- ã³ãŒãã®åå©çšæ§ã®åäžïŒ ãã¿ãŒã³ã¯ãç°ãªãã³ã³ããã¹ãã«é©å¿ã§ããæç¢ºã«å®çŸ©ããã解決çãæäŸããããšã§ãã³ãŒãã®åå©çšãä¿é²ããŸãã
- ä¿å®æ§ã®åŒ·åïŒ ç¢ºç«ããããã¿ãŒã³ã«åŸã£ãã³ãŒãã¯ãäžè¬çã«çè§£ããããä¿®æ£ã容æã§ãããããä¿å®äžã«ãã°ãæ··å ¥ããããªã¹ã¯ãäœæžããŸãã
- ã¹ã±ãŒã©ããªãã£ã®åäžïŒ ãã¿ãŒã³ã¯ãã°ãã°ã¹ã±ãŒã©ããªãã£ã®åé¡ã«çŽæ¥å¯ŸåŠããå°æ¥ã®æé·ãå€åããèŠä»¶ã«å¯Ÿå¿ã§ããæ§é ãæäŸããŸãã
- éçºæéã®ççž®ïŒ å®èšŒæžã¿ã®è§£æ±ºçãæŽ»çšããããšã§ãéçºè ã¯è»èŒªã®åçºæãé¿ãããããžã§ã¯ãã®ç¬èªã®éšåã«éäžã§ããŸãã
- ã³ãã¥ãã±ãŒã·ã§ã³ã®æ¹åïŒ ãã¶ã€ã³ãã¿ãŒã³ã¯éçºè ã®ããã®å ±éèšèªãæäŸããããè¯ãã³ãã¥ãã±ãŒã·ã§ã³ãšååãä¿é²ããŸãã
- è€éæ§ã®äœæžïŒ ãã¿ãŒã³ã¯ãå€§èŠæš¡ãªãœãããŠã§ã¢ã·ã¹ãã ãããå°ããã管çããããã³ã³ããŒãã³ãã«åå²ããããšã§ããã®è€éæ§ã管çããã®ã«åœ¹ç«ã¡ãŸãã
ãã¶ã€ã³ãã¿ãŒã³ã®åé¡
ãã¶ã€ã³ãã¿ãŒã³ã¯ãéåžžã以äžã®3ã€ã®äž»èŠãªã¿ã€ãã«åé¡ãããŸãïŒ
1. çæã«é¢ãããã¿ãŒã³ (Creational Patterns)
çæã«é¢ãããã¿ãŒã³ã¯ããªããžã§ã¯ãã®çæã¡ã«ããºã ãæ±ããã€ã³ã¹ã¿ã³ã¹åã®ããã»ã¹ãæœè±¡åãããªããžã§ã¯ããã©ã®ããã«çæããããã«æè»æ§ãæäŸããããšãç®æããŸãããããã¯ããªããžã§ã¯ãã䜿çšããã¯ã©ã€ã¢ã³ãã³ãŒããããªããžã§ã¯ãçæããžãã¯ãåé¢ããŸãã
- ã·ã³ã°ã«ãã³ (Singleton)ïŒ ã¯ã©ã¹ããã äžã€ã®ã€ã³ã¹ã¿ã³ã¹ããæããªãããšãä¿èšŒãããããžã®ã°ããŒãã«ãªã¢ã¯ã»ã¹ãã€ã³ããæäŸããŸããå€å žçãªäŸã¯ãã®ã³ã°ãµãŒãã¹ã§ãããã€ããªã©ã®äžéšã®åœã§ã¯ãããŒã¿ãã©ã€ãã·ãŒãæéèŠèŠãããŠãããã·ã³ã°ã«ãã³ã®ãã¬ãŒã䜿çšããŠæ©å¯æ å ±ãžã®ã¢ã¯ã»ã¹ãæ éã«å¶åŸ¡ã»ç£æ»ããGDPRãªã©ã®èŠå¶ãžã®æºæ ãä¿èšŒããããšããããŸãã
- ãã¡ã¯ããªã¡ãœãã (Factory Method)ïŒ ãªããžã§ã¯ããçæããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŸãããã©ã®ã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åãããã¯ãµãã¯ã©ã¹ã«æ±ºå®ãããŸããããã«ãããã³ã³ãã€ã«æã«æ£ç¢ºãªãªããžã§ã¯ãã®åãããããªãå Žåã«åœ¹ç«ã€ãã€ã³ã¹ã¿ã³ã¹åã®é å»¶ãå¯èœã«ãªããŸããã¯ãã¹ãã©ãããã©ãŒã ã®UIããŒã«ããããèããŠã¿ãŠãã ããããã¡ã¯ããªã¡ãœããã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒäŸïŒWindows, macOS, LinuxïŒã«åºã¥ããŠãçæãã¹ãé©åãªãã¿ã³ãããã¹ããã£ãŒã«ãã®ã¯ã©ã¹ã決å®ã§ããŸãã
- æœè±¡ãã¡ã¯ã㪠(Abstract Factory)ïŒ é¢é£ãããŸãã¯äŸåãããªããžã§ã¯ãã®ãã¡ããªãŒãããããã®å ·è±¡ã¯ã©ã¹ãæå®ããããšãªãçæããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸããããã¯ãç°ãªãã³ã³ããŒãã³ãã®ã»ãããç°¡åã«åãæ¿ããå¿ èŠãããå Žåã«äŸ¿å©ã§ããåœéåãèããŠã¿ãŸããããæœè±¡ãã¡ã¯ããªã¯ããŠãŒã¶ãŒã®ãã±ãŒã«ïŒäŸïŒè±èªããã©ã³ã¹èªãæ¥æ¬èªïŒã«åºã¥ããŠãæ£ããèšèªãšãã©ãŒããããæã€UIã³ã³ããŒãã³ãïŒãã¿ã³ãã©ãã«ãªã©ïŒãçæã§ããŸãã
- ãã«ã㌠(Builder)ïŒ è€éãªãªããžã§ã¯ãã®æ§ç¯ãšãã®è¡šçŸãåé¢ããããšã§ãåãæ§ç¯ããã»ã¹ã§ç°ãªã衚çŸãçæã§ããããã«ããŸããåãçµã¿ç«ãŠã©ã€ã³ããã»ã¹ã§ãç°ãªãéšåã䜿ã£ãŠæ§ã ãªçš®é¡ã®è»ïŒã¹ããŒãã«ãŒãã»ãã³ãSUVïŒã補é ããããšãæ³åããŠã¿ãŠãã ããã
- ãããã¿ã€ã (Prototype)ïŒ ãããã¿ã€ããšãªãã€ã³ã¹ã¿ã³ã¹ãçšããŠçæãã¹ããªããžã§ã¯ãã®çš®é¡ãç¹å®ãããã®ãããã¿ã€ããã³ããŒããŠæ°ãããªããžã§ã¯ããçæããŸããããã¯ããªããžã§ã¯ãã®çæã³ã¹ããé«ããç¹°ãè¿ãã®åæåãé¿ãããå Žåã«æçã§ããäŸãã°ãã²ãŒã ãšã³ãžã³ã¯ãã£ã©ã¯ã¿ãŒãç°å¢ãªããžã§ã¯ãã«ãããã¿ã€ãã䜿çšããããããæåããåäœæãã代ããã«ãå¿ èŠã«å¿ããŠã¯ããŒã³ãäœæããããšããããŸãã
2. æ§é ã«é¢ãããã¿ãŒã³ (Structural Patterns)
æ§é ã«é¢ãããã¿ãŒã³ã¯ãã¯ã©ã¹ããªããžã§ã¯ããã©ã®ããã«çµã¿åããããŠãã倧ããªæ§é ã圢æãããã«çŠç¹ãåœãŠãŸãããããã¯ãšã³ãã£ãã£éã®é¢ä¿ãæ±ããããããåçŽåããæ¹æ³ã«é¢ãããŸãã
- ã¢ããã¿ãŒ (Adapter)ïŒ ããã¯ã©ã¹ã®ã€ã³ã¿ãŒãã§ãŒã¹ããã¯ã©ã€ã¢ã³ããæåŸ ããå¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ã«å€æããŸããããã«ãããäºææ§ã®ãªãã€ã³ã¿ãŒãã§ãŒã¹ãæã€ã¯ã©ã¹å士ã飿ºã§ããããã«ãªããŸããäŸãã°ãXMLã䜿çšããã¬ã¬ã·ãŒã·ã¹ãã ããJSONã䜿çšããæ°ããã·ã¹ãã ãšçµ±åããããã«ã¢ããã¿ãŒã䜿çšããããšããããŸãã
- ããªããž (Bridge)ïŒ æœè±¡åãšãã®å®è£ ãåé¢ããäž¡è ãç¬ç«ããŠå€æŽã§ããããã«ããŸããããã¯ãèšèšã«è€æ°ã®å€åèŠçŽ ãããå Žåã«äŸ¿å©ã§ããç°ãªã圢ç¶ïŒåãé·æ¹åœ¢ïŒãšç°ãªãã¬ã³ããªã³ã°ãšã³ãžã³ïŒOpenGL, DirectXïŒããµããŒãããæç»ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŠãã ãããããªããžãã¿ãŒã³ã¯ã圢ç¶ã®æœè±¡åãšã¬ã³ããªã³ã°ãšã³ãžã³ã®å®è£ ãåé¢ããäžæ¹ã«åœ±é¿ãäžããããšãªãæ°ãã圢ç¶ãã¬ã³ããªã³ã°ãšã³ãžã³ã远å ã§ããŸãã
- ã³ã³ããžãã (Composite)ïŒ ãªããžã§ã¯ããæšæ§é ã«çµã¿ç«ãŠãŠãéšåãšå šäœãšããéå±€ã衚çŸããŸããããã«ãããã¯ã©ã€ã¢ã³ãã¯åã ã®ãªããžã§ã¯ããšãªããžã§ã¯ãã®éåäœãäžæ§ã«æ±ãããšãã§ããŸããå€å žçãªäŸã¯ãã¡ã€ã«ã·ã¹ãã ã§ããã¡ã€ã«ãšãã£ã¬ã¯ããªã¯æšæ§é ã®ããŒããšããŠæ±ãããšãã§ããŸããå€åœç±äŒæ¥ã®æèã§ã¯ãçµç¹å³ãèããŠã¿ãŠãã ãããã³ã³ããžãããã¿ãŒã³ã¯ãéšçœ²ãšåŸæ¥å¡ã®éå±€ã衚çŸããåã ã®åŸæ¥å¡ãéšçœ²å šäœã«å¯ŸããŠæäœïŒäŸïŒäºç®ã®èšç®ïŒãå®è¡ã§ããŸãã
- ãã³ã¬ãŒã¿ (Decorator)ïŒ ãªããžã§ã¯ãã«åçã«è²¬åã远å ããŸããããã¯ãæ©èœãæ¡åŒµããããã®ãµãã¯ã©ã¹åã«ä»£ããæè»ãªä»£æ¿ææ®µãæäŸããŸããUIã³ã³ããŒãã³ãã«æ ç·ã圱ãèæ¯ãªã©ã®æ©èœã远å ããããšãæ³åããŠã¿ãŠãã ããã
- ãã¡ãµãŒã (Facade)ïŒ è€éãªãµãã·ã¹ãã ã«å¯Ÿããç°¡ç¥åãããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸããããã«ããããµãã·ã¹ãã ã䜿ãããããçè§£ãããããªããŸããäŸãšããŠãåå¥è§£æãæ§æè§£æãã³ãŒãçæã®è€éããåçŽãª `compile()` ã¡ãœããã®èåŸã«é ãã³ã³ãã€ã©ããããŸãã
- ãã©ã€çŽ (Flyweight)ïŒ å€æ°ã®çްããç²åºŠã®ãªããžã§ã¯ããå¹ççã«ãµããŒãããããã«å ±æã䜿çšããŸããããã¯ãå ±éã®ç¶æ ãå ±æãã倿°ã®ãªããžã§ã¯ããããå Žåã«äŸ¿å©ã§ããããã¹ããšãã£ã¿ãèããŠã¿ãŸãããããã©ã€çŽãã¿ãŒã³ã¯ãæåã®ã°ãªããå ±æããããã«äœ¿çšã§ããç¹ã«äžåœèªãæ¥æ¬èªã®ããã«æ°åã®æåãæã€æåã»ãããæ±ãéã«ãã¡ã¢ãªæ¶è²»ãåæžãã倧ããªææžã衚瀺ããéã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ãããã· (Proxy)ïŒ ä»ã®ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããããã«ããã®ä»£çãŸãã¯ãã¬ãŒã¹ãã«ããæäŸããŸããããã¯ãé å»¶åæåãã¢ã¯ã»ã¹å¶åŸ¡ããªã¢ãŒãã¢ã¯ã»ã¹ãªã©ãããŸããŸãªç®çã§äœ¿çšã§ããŸããäžè¬çãªäŸã¯ãæåã«ç»åã®äœè§£å床çãããŒãããå¿ èŠã«å¿ããŠé«è§£å床çãããŒããããããã·ç»åã§ãã
3. æ¯ãèãã«é¢ãããã¿ãŒã³ (Behavioral Patterns)
æ¯ãèãã«é¢ãããã¿ãŒã³ã¯ãã¢ã«ãŽãªãºã ãšãªããžã§ã¯ãéã®è²¬åã®å²ãåœãŠã«é¢ãããŸãããããã¯ããªããžã§ã¯ããã©ã®ããã«çžäºäœçšãã責åã忣ãããããç¹åŸŽã¥ããŸãã
- 責任ã®é£é (Chain of Responsibility)ïŒ ãªã¯ãšã¹ãã®éä¿¡è ãšãã®åä¿¡è ãçµåãããããšãé¿ããè€æ°ã®ãªããžã§ã¯ãã«ãªã¯ãšã¹ããåŠçããæ©äŒãäžããŸãããªã¯ãšã¹ãã¯ãããããã®ãã³ãã©ãåŠçãããŸã§ããã³ãã©ã®é£éã«æ²¿ã£ãŠæž¡ãããŸãããªã¯ãšã¹ãããã®è€éãã«å¿ããŠç°ãªããµããŒãéå±€ã«ã«ãŒãã£ã³ã°ããããã«ããã¹ã¯ã·ã¹ãã ãèããŠã¿ãŠãã ããã
- ã³ãã³ã (Command)ïŒ ãªã¯ãšã¹ãããªããžã§ã¯ããšããŠã«ãã»ã«åããããã«ãã£ãŠã¯ã©ã€ã¢ã³ããç°ãªããªã¯ãšã¹ãã§ãã©ã¡ãŒã¿åãããããªã¯ãšã¹ãããã¥ãŒã«å ¥ããããã°ã«èšé²ããããå ã«æ»ããæäœããµããŒããããã§ããŸããåã¢ã¯ã·ã§ã³ïŒäŸïŒåãåããã³ããŒã貌ãä»ãïŒãã³ãã³ããªããžã§ã¯ããšããŠè¡šçŸãããããã¹ããšãã£ã¿ãèããŠã¿ãŠãã ããã
- ã€ã³ã¿ãŒããªã¿ (Interpreter)ïŒ ããèšèªãäžãããããšãããã®ææ³ã®è¡šçŸãå®çŸ©ãããã®è¡šçŸãçšããŠèšèªã®æãè§£éããã€ã³ã¿ãŒããªã¿ãå®çŸ©ããŸãããã¡ã€ã³åºæèšèªïŒDSLïŒãäœæããã®ã«äŸ¿å©ã§ãã
- ã€ãã¬ãŒã¿ (Iterator)ïŒ éçŽãªããžã§ã¯ãã®èŠçŽ ã«ããã®å éšè¡šçŸãå ¬éããããšãªãé çªã«ã¢ã¯ã»ã¹ããæ¹æ³ãæäŸããŸããããã¯ãããŒã¿ã®ã³ã¬ã¯ã·ã§ã³ãèµ°æ»ããããã®åºæ¬çãªãã¿ãŒã³ã§ãã
- ã¡ãã£ãšãŒã¿ (Mediator)ïŒ äžé£ã®ãªããžã§ã¯ããã©ã®ããã«çžäºäœçšããããã«ãã»ã«åãããªããžã§ã¯ããå®çŸ©ããŸããããã«ããããªããžã§ã¯ããäºããæç€ºçã«åç §ããã®ãé²ãããããã®çžäºäœçšãç¬ç«ããŠå€æŽã§ãããããççµåãä¿é²ãããŸããã¡ãã£ãšãŒã¿ãªããžã§ã¯ããç°ãªããŠãŒã¶ãŒéã®éä¿¡ã管çãããã£ããã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŠãã ããã
- ã¡ã¡ã³ã (Memento)ïŒ ã«ãã»ã«åãæãªãããšãªãããªããžã§ã¯ãã®å éšç¶æ ãææããŠå€éšåããåŸã§ãªããžã§ã¯ãããã®ç¶æ ã«åŸ©å ã§ããããã«ããŸããå ã«æ»ã/ããçŽãæ©èœãå®è£ ããã®ã«äŸ¿å©ã§ãã
- ãªãã¶ãŒã (Observer)ïŒ ãªããžã§ã¯ãéã«äžå¯Ÿå€ã®äŸåé¢ä¿ãå®çŸ©ãããããªããžã§ã¯ãã®ç¶æ ãå€åãããšããã®ãã¹ãŠã®äŸåãªããžã§ã¯ããèªåçã«éç¥ãããæŽæ°ãããããã«ããŸãããã®ãã¿ãŒã³ã¯UIãã¬ãŒã ã¯ãŒã¯ã§é »ç¹ã«äœ¿çšãããUIèŠçŽ ïŒãªãã¶ãŒãïŒãåºç€ãšãªãããŒã¿ã¢ãã«ïŒãµããžã§ã¯ãïŒã®å€æŽæã«èªèº«ãæŽæ°ããŸããæ ªäŸ¡ïŒãµããžã§ã¯ãïŒã倿Žããããã³ã«è€æ°ã®ãã£ãŒãã衚瀺ïŒãªãã¶ãŒãïŒãæŽæ°ãããæ ªåŒåžå Žã¢ããªã±ãŒã·ã§ã³ã¯ãäžè¬çãªäŸã§ãã
- ã¹ããŒã (State)ïŒ ãªããžã§ã¯ãããã®å éšç¶æ ãå€åãããšãã«ããã®æ¯ãèãã倿Žã§ããããã«ããŸãããªããžã§ã¯ãã¯ãããããã®ã¯ã©ã¹ã倿Žãããã®ããã«èŠããŸãããã®ãã¿ãŒã³ã¯ãæéåã®ç¶æ ãšãããã®éã®é·ç§»ãæã€ãªããžã§ã¯ããã¢ãã«åããã®ã«äŸ¿å©ã§ããèµ€ãé»ãç·ã®ãããªç¶æ ãæã€ä¿¡å·æ©ãèããŠã¿ãŠãã ããã
- ã¹ãã©ããžãŒ (Strategy)ïŒ ã¢ã«ãŽãªãºã ã®ãã¡ããªãŒãå®çŸ©ãããããããã«ãã»ã«åããŠããããã亀æå¯èœã«ããŸããã¹ãã©ããžãŒã¯ãããã䜿çšããã¯ã©ã€ã¢ã³ãããç¬ç«ããŠã¢ã«ãŽãªãºã ã倿Žã§ããããã«ããŸããããã¯ãããã¿ã¹ã¯ãå®è¡ããè€æ°ã®æ¹æ³ããããããããç°¡åã«åãæ¿ãããå Žåã«äŸ¿å©ã§ããeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã«ãããç°ãªãæ¯æãæ¹æ³ïŒäŸïŒã¯ã¬ãžããã«ãŒããPayPalãéè¡æ¯èŸŒïŒãèããŠã¿ãŠãã ããã忝æãæ¹æ³ã¯ãå¥ã®ã¹ãã©ããžãŒãªããžã§ã¯ããšããŠå®è£ ã§ããŸãã
- ãã³ãã¬ãŒãã¡ãœãã (Template Method)ïŒ ã¡ãœããå ã«ã¢ã«ãŽãªãºã ã®éªšæ Œãå®çŸ©ããããã€ãã®ã¹ãããããµãã¯ã©ã¹ã«å§è²ããŸãããã³ãã¬ãŒãã¡ãœããã¯ããµãã¯ã©ã¹ãã¢ã«ãŽãªãºã ã®æ§é ã倿Žããããšãªããã¢ã«ãŽãªãºã ã®ç¹å®ã®ã¹ããããåå®çŸ©ã§ããããã«ããŸããã¬ããŒãçæã®åºæ¬ã¹ãããïŒäŸïŒããŒã¿ååŸããã©ãŒããããåºåïŒããã³ãã¬ãŒãã¡ãœããã§å®çŸ©ããããµãã¯ã©ã¹ãç¹å®ã®ããŒã¿ååŸããã©ãŒãããããžãã¯ãã«ã¹ã¿ãã€ãºã§ããã¬ããŒãçæã·ã¹ãã ãèããŠã¿ãŠãã ããã
- ããžã¿ãŒ (Visitor)ïŒ ãªããžã§ã¯ãæ§é ã®èŠçŽ ã«å¯ŸããŠå®è¡ãããæäœã衚ããŸããããžã¿ãŒã¯ããããäœçšããèŠçŽ ã®ã¯ã©ã¹ã倿Žããããšãªããæ°ããæäœãå®çŸ©ã§ããããã«ããŸããè€éãªããŒã¿æ§é ïŒäŸïŒæœè±¡æ§ææšïŒãèµ°æ»ããç°ãªãçš®é¡ã®ããŒãã«å¯ŸããŠç°ãªãæäœïŒäŸïŒã³ãŒãè§£æãæé©åïŒãå®è¡ããããšãæ³åããŠã¿ãŠãã ããã
ç°ãªãããã°ã©ãã³ã°èšèªã«ãããäŸ
ãã¶ã€ã³ãã¿ãŒã³ã®ååã¯äžè²«ããŠããŸããããã®å®è£ ã¯äœ¿çšããããã°ã©ãã³ã°èšèªã«ãã£ãŠç°ãªãå ŽåããããŸãã
- JavaïŒ GoFã®äŸã¯äž»ã«C++ãšSmalltalkã«åºã¥ããŠããŸããããJavaã®ãªããžã§ã¯ãæåã®æ§è³ªã¯ãã¶ã€ã³ãã¿ãŒã³ã®å®è£ ã«éåžžã«é©ããŠããŸãã人æ°ã®Javaãã¬ãŒã ã¯ãŒã¯ã§ããSpring Frameworkã¯ãã·ã³ã°ã«ãã³ããã¡ã¯ããªããããã·ãªã©ã®ãã¶ã€ã³ãã¿ãŒã³ãåºç¯å²ã«æŽ»çšããŠããŸãã
- PythonïŒ Pythonã®åçåä»ããšæè»ãªæ§æã¯ããã¶ã€ã³ãã¿ãŒã³ã®ç°¡æœã§è¡šçŸåè±ããªå®è£ ãå¯èœã«ããŸããPythonã«ã¯ç¬èªã®ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ããããäŸãã° `@decorator` ã䜿ã£ãŠç¹å®ã®ã¡ãœãããåçŽåããŸãã
- C#ïŒ C#ããŸãããªããžã§ã¯ãæåã®ååã匷åã«ãµããŒãããŠããããã¶ã€ã³ãã¿ãŒã³ã¯.NETéçºã§åºã䜿çšãããŠããŸãã
- JavaScriptïŒ JavaScriptã®ãããã¿ã€ãããŒã¹ã®ç¶æ¿ãšé¢æ°åããã°ã©ãã³ã°ã®æ©èœã¯ããã¶ã€ã³ãã¿ãŒã³ã®å®è£ ã«ç°ãªãã¢ãããŒããæäŸããŸããã¢ãžã¥ãŒã«ããªãã¶ãŒãããã¡ã¯ããªãªã©ã®ãã¿ãŒã³ã¯ãReactãAngularãVue.jsã®ãããªããã³ããšã³ãéçºãã¬ãŒã ã¯ãŒã¯ã§äžè¬çã«äœ¿çšãããŠããŸãã
é¿ããã¹ãããããééã
ãã¶ã€ã³ãã¿ãŒã³ã¯æ°å€ãã®å©ç¹ãæäŸããŸãããããããè³¢æã«äœ¿çšããããããèœãšã穎ãé¿ããããšãéèŠã§ãïŒ
- éå°ãªèšèšïŒOver-EngineeringïŒïŒ ãã¿ãŒã³ãææå°æ©ã«ããããã¯äžå¿ èŠã«é©çšãããšãçè§£ãä¿å®ãå°é£ãªé床ã«è€éãªã³ãŒãã«ã€ãªããå¯èœæ§ããããŸããããåçŽãªã¢ãããŒãã§ååãªå Žåã¯ããã¿ãŒã³ãç¡çã«è§£æ±ºçã«åœãŠã¯ããªãã§ãã ããã
- ãã¿ãŒã³ã®èª€è§£ïŒ ãã¿ãŒã³ãå®è£ ããããšããåã«ãããã解決ããåé¡ãšããããé©çšå¯èœãªã³ã³ããã¹ãã培åºçã«çè§£ããŠãã ããã
- ãã¬ãŒããªãã®ç¡èŠïŒ ãã¹ãŠã®ãã¶ã€ã³ãã¿ãŒã³ã«ã¯ãã¬ãŒããªãã䌎ããŸããæœåšçãªæ¬ ç¹ãèæ ®ããç¹å®ã®ç¶æ³ã§å©ç¹ãã³ã¹ããäžåãããšã確èªããŠãã ããã
- ã³ãŒãã®ã³ããŒïŒããŒã¹ãïŒ ãã¶ã€ã³ãã¿ãŒã³ã¯ã³ãŒãã®ãã³ãã¬ãŒãã§ã¯ãããŸãããæ ¹æ¬çãªååãçè§£ããç¹å®ã®ããŒãºã«åãããŠãã¿ãŒã³ãé©å¿ãããŠãã ããã
GoF (å人çµ)ãè¶ ããŠ
GoFã®ãã¿ãŒã³ã¯äŸç¶ãšããŠåºç€çã§ããããã¶ã€ã³ãã¿ãŒã³ã®äžçã¯é²åãç¶ããŠããŸãã䞊è¡ããã°ã©ãã³ã°ã忣ã·ã¹ãã ãã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ãªã©ã®åéã§ç¹å®ã®åé¡ã«å¯ŸåŠããããã«ãæ°ãããã¿ãŒã³ãç»å ŽããŠããŸããäŸãšããŠã¯ä»¥äžã®ãããªãã®ããããŸãïŒ
- CQRS (ã³ãã³ãã»ã¯ãšãªè²¬ååé¢)ïŒ ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ãåäžãããããã«ãèªã¿åãæäœãšæžãèŸŒã¿æäœãåé¢ããŸãã
- ã€ãã³ããœãŒã·ã³ã°ïŒ ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãžã®ãã¹ãŠã®å€æŽãäžé£ã®ã€ãã³ããšããŠãã£ããã£ããå æ¬çãªç£æ»ãã°ãæäŸãããªãã¬ã€ãã¿ã€ã ãã©ãã«ãªã©ã®é«åºŠãªæ©èœãå¯èœã«ããŸãã
- ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ïŒ ã¢ããªã±ãŒã·ã§ã³ãããããããç¹å®ã®ããžãã¹èœåã«è²¬ä»»ãæã€ãå°ããç¬ç«ããŠãããã€å¯èœãªãµãŒãã¹ã®éåäœã«åè§£ããŸãã
çµè«
ãã¶ã€ã³ãã¿ãŒã³ã¯ãœãããŠã§ã¢éçºè ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ã§ãããäžè¬çãªèšèšåé¡ã«å¯Ÿããåå©çšå¯èœãªè§£æ±ºçãæäŸããã³ãŒãã®å質ãä¿å®æ§ãã¹ã±ãŒã©ããªãã£ãä¿é²ããŸãããã¶ã€ã³ãã¿ãŒã³ã®èåŸã«ããååãçè§£ããããããè³¢æã«é©çšããããšã§ãéçºè ã¯ããå ç¢ã§ãæè»æ§ããããå¹ççãªãœãããŠã§ã¢ã·ã¹ãã ãæ§ç¯ã§ããŸããããããç¹å®ã®ã³ã³ããã¹ããé¢é£ãããã¬ãŒããªããèæ ®ããã«ãç²ç®çã«ãã¿ãŒã³ãé©çšããããšã¯é¿ããããšãéèŠã§ãããœãããŠã§ã¢éçºã®çµ¶ããé²åããç¶æ³ã«åžžã«å¯Ÿå¿ããããã«ã¯ãç¶ç¶çãªåŠç¿ãšæ°ãããã¿ãŒã³ã®æ¢æ±ãäžå¯æ¬ ã§ããã·ã³ã¬ããŒã«ããã·ãªã³ã³ãã¬ãŒãŸã§ããã¶ã€ã³ãã¿ãŒã³ã®çè§£ãšé©çšã¯ããœãããŠã§ã¢ã¢ãŒããã¯ããšéçºè ã«ãšã£ãŠæ®éçãªã¹ãã«ã§ãã